package persistencia;

import java.sql.*;
import java.util.ArrayList;
import controlador.*;
import Util.*;


public class PersistenciaInvitaciones extends PersistenciaConexion {


    public static boolean darAltaInvitacion(String nick) {

        boolean res = false;
        Connection con = null;
        Statement st = null;
        int quedan=0;

       //Habria que comprobar antes que aun le quedan invitaciones para poder dar de alta 
       //nuevas invitaciones        
        try {
            crearConexion();           
            quedan = invitacionesRestantes(nick);
            if(quedan>0){
             int rowcount = st.executeUpdate("UPDATE  invitaciones SET "
                                             + "estado = 'alta' " + "WHERE nickUsuario = " + nick);
                 if (rowcount == 1) {
                     res = true;
                }
            }
        } catch (Exception e) {
            System.out.println("ERROR");

        } finally {
            PersistenciaConexion.cerrarConexion(con);
        }
        return res;
    }

    public static boolean darBajaInvitacion(String codigo) {

        boolean res = false;
        Connection con = null;
        Statement st = null;

        try {
            crearConexion();
            int rowcount = st.executeUpdate("UPDATE invitaciones SET "
                    + "estado = 'baja' " + "WHERE codigo = " + codigo);
            if (rowcount == 1) {
                res = true;
            }
        } catch (Exception e) {
            System.out.println("ERROR");

        } finally {
            PersistenciaConexion.cerrarConexion(con);
        }
        return res;
    }
     
    // Para borrar una invitacion le paso el nick del asuario receptor ->usuarioAcepta
    // asi, borramos esa invitacion de la bd.
    //¿? tengo que considerar la fechaAceptacion este vacio o el estado a baja
    public static void borraInvitacion(String nick) {
        
        Connection con = null;
        Statement st = null;
        
        try {
            crearConexion();

            int rowcount = st.executeUpdate("DELETE FROM invitaciones WHERE usuarioAcepta ='" + nick + "'");

        } catch (Exception e) {
            System.out.println("ERROR");

        } finally {
            PersistenciaConexion.cerrarConexion(con);
        }
    }

    public static void aceptarInvitacion(Date fechaAceptacion, Usuario usuarioAcepta) {
        
        Connection con = null;
        Statement st = null;
        
        try {
            crearConexion();

            int rowcount = st.executeUpdate("UPDATE invitaciones"
                                             + "SET fechaAceptacion = " + fechaAceptacion + ","
                                                + " estado = " + "alta" + "WHERE codigo = " + usuarioAcepta);

        } catch (Exception e) {
            System.out.println("ERROR");

        } finally {
            PersistenciaConexion.cerrarConexion(con);
        }
    }

    public static int invitacionesRestantes(String usuarioEnvia) {
        
        Connection con = null;
        Statement st = null;
        int cont=0;
        int total=0;   
        
        
        try {
          crearConexion();                  
         //Cuenta las invitaciones enviadas por un usuario, habria que restarselas al total que puede enviar
        ResultSet invitacionesRestantes = st.executeQuery("SELECT COUNT (*) AS contador FROM invitaciones "
                                                         + " WHERE usuarioEnvia="+usuarioEnvia);
        cont = invitacionesRestantes.getInt("contador");
        cont = total - cont;            

        } catch (Exception e) {
            System.out.println("ERROR");

        } finally {
            PersistenciaConexion.cerrarConexion(con);
        }
        return cont;//return restantes;
    }

    public static int invitacionesAceptadas(String usuarioAcepta, String usuarioEnvia) {
        
        Connection con = null;
        Statement st = null;
        int cont=0;
        
        try {
            crearConexion();

            ResultSet aceptadas = st.executeQuery("SELECT COUNT (*) AS contador FROM invitaciones "
                    + " WHERE usuarioAcepta="+usuarioAcepta+"AND usuarioEnvia="+usuarioEnvia);
            cont = aceptadas.getInt("contador");

        } catch (Exception e) {
            System.out.println("ERROR");

        } finally {
            PersistenciaConexion.cerrarConexion(con);
        }
        return cont;
    }

    public static void invitacionesUsuario (String usuarioEnvia) {
        
        Connection con = null;
        Statement st = null;
    
        try {
            crearConexion();
        ResultSet rs = st.executeQuery("SELECT (*) FROM invitaciones WHERE usuarioEnvia="+usuarioEnvia);
        } catch (Exception e){
            
            System.out.println("ERROR");
        }
         finally {
            PersistenciaConexion.cerrarConexion(con);
        }
    }
    
    
    //10/junio/2011
    // Vamos a registrar una invitacion.    
    public static void registrarUnaInvitacion(Usuario usu, String usuarioReceptorEmail,Invitacion inv){
        String sql = "insert into invitaciones(codigo, fechaEnvio, fechaAceptacion,"
                + " usuarioEnvia, usuarioAcepta, estado)"
                 + " values ('" + inv.getCodigo()+ "','"                                         
                        + UtilFecha.fechaMySQL(inv.getFechaEnvio()) + "','"
                        + UtilFecha.fechaMySQL(inv.getFechaAceptacion()) + "',"  
                        + usu.getUsuario()+ "','"
                        + "usuarioReceptorEmail" + "','"
                        + "alta" + "');";
         Connection con = null;
        Statement st = null;

        try {
            con = PersistenciaConexion.crearConexion();
            st = con.createStatement();
            st.executeUpdate(sql);
            st.close();
            System.out.println("[i] La invitacion se ha dado de alta correctamente.");
        } catch (Exception e) {
            System.out.println("[!] Error al insertar una nuevo invitacion. " + e.getMessage());
        }

        PersistenciaConexion.cerrarConexion(con);
    
    }
   
}
